Skip to content

http1 和 http2 的区别, http2 做了那些改进,有哪些不足,http3 做了那些改进

http1.1

  • 1999 长链接、管线化、断点续传

长链接(持久链接): connection:keep-alive 即 TCP 默认不关闭,可以被多个请求复用,建立 tcp 连接三次握手->请求响应请求响应->四次挥手 管道机制:一个 TCP 连接,可以同时发送多个请求,浏览器一般是 6 个,请求 1 请求 2 请求 3->响应 123 断点续传: 通过请求头字段 content-range=bytes=0-9 来实现 206 缓存: 新增了一些缓存的字段 catch-control 方法: 新增了一些方法,PUT、DELETE、OPTIONS、PATCH

http2

2015 年 http2 建立在 https 基础之上

  • 头部压缩:HPACK,http1.1 只压缩了 body 没有头
  • 分帧传输: 有上下文联系,进行组合,并发送数据(二进制传输,头信息和数据体都是二进制),解决头部拥塞问题
  • 多路复用(信道复用): 一条 tcp 链接上可以乱序收发请求和响应。多个响应和请求不再有顺序关系。同域只开启一个 tcp 链接
  • 服务器主动推送消息(server push)
  • 请求优先级: 设置数据帧的优先级,让服务器优先处理

http3

2018 年 基于 UDP, 添加了 QUIC 协议 实现可靠

  • 拥塞控制
  • 扩展了多路复用
  • 传输速度提升
  • 头部压缩

管道机制会造成什么样的问题,http2.0 是怎么解决的

头部拥塞:HTTP 传输是基于请求-应答的模式进行的,报文必须是一发一收,里面的任务被放在一个任务队列中串行执行,一旦队首的请求处理太慢,就会阻塞后面请求的处理

二进制帧没有先后关系 多路复用,分帧传输,进行组合

头部压缩的原理是什么

HPACK 算法 服务器和客户端之间建立哈希表,将用到的字段存放在这张表中,那么在传输的时候对于之前出现过的值, 只需要把索引(比如 0,1,2,...)传给对方即可,对方拿到索引查表就行了。这种传索引的方式,可以说让请求头字段得到极大程度的精简和复用。

http2.0 允许服务器主动推送消息,那跟 WebSocket 有什么区别吗

而 HTTP2.0 则是对 HTML、CSS 等 JS 资源的传输方式进行了优化,并没有提供新的 JS API,也不能用于实时传输消息。 WebSocket 是基于 HTTP1.1 的协议,可以简单理解为创建了一条 TCP 连接,

https://juejin.cn/post/6844904100035821575#heading-91

在 MIT 许可下发布